package com.bbva.kyfb.kyfbdaohostfo.servicios.host.acceso;

import java.math.BigDecimal;

import com.bbva.kyfb.kyfbdaohostfo.servicios.host.pggptk70_1_1_1.PeticionTransaccionPggptk70_1_1_1;
import com.bbva.kyfb.kyfbdaohostfo.servicios.host.pggptw42_1_1_3.PeticionTransaccionPggptw42_1_1_3;
import com.bbva.kyfb.kyfbdaohostfo.servicios.host.tpbft080_1_8_1.PeticionTransaccionTpbft080_1_8_1;
import com.bbva.kyfb.kyfbdtofo.FicheroRequest;
import com.bbva.kyfb.kyfbdtofo.trf.ConsultarDetalleCuentaInDto;
import com.bbva.kyfb.kyfbdtofo.trf.DetalleTransferencia;
import com.bbva.kyfb.kyfbdtofo.trf.DetalleTraspaso;
import com.bbva.kyfb.kyfbutils.constantes.ConstantesFO;

public class DtoToTransaccion {

	public static PeticionTransaccionPggptw42_1_1_3 trfNacional(
			final DetalleTransferencia detalleTransferencia,
			FicheroRequest ficheroRequest) {
		PeticionTransaccionPggptw42_1_1_3 peticion = new PeticionTransaccionPggptw42_1_1_3();
		
		peticion.setXtiCorrectoE(ConstantesFO.XTI_CORRECTORA_N);
		peticion.setXtiOperacE(ConstantesFO.XTI_OPERACION_TN);
		peticion.setXtiTipejecuE(ConstantesFO.XTI_EJECUCION);
		peticion.setCodTipgastoE(ConstantesFO.GASTO_SHARE);
		peticion.setCodDivisaE(ConstantesFO.DIVISA_EUR);
		peticion.setXtiCtaOrdE(ConstantesFO.COD_NUM_UNO);
		peticion.setXtiCtaBenE(ConstantesFO.COD_NUM_UNO);

		peticion.setCodRefcorreE(ficheroRequest.getNumItem());
		
		// obtenemos por llamada a kygu
		peticion.setCodBancontE(new Integer(182));
		peticion.setCodOficontE(new Integer(4000));
		peticion.setCodContrconE(new Integer(525));
		peticion.setCodFolioconE(new Long(3678307));
		// fin de llamada

		peticion.setCodIbanOrdE(detalleTransferencia.getCuentaOrdenante());
		
		String cuentaDestino = !detalleTransferencia.getEsDestinoLibrePr().equals("N")?
				detalleTransferencia.getCuentaDestinoLibre():detalleTransferencia.getCuentaBeneficiaria();

		peticion.setCodIbanBenE(cuentaDestino);

		peticion.setImpImporteE(new BigDecimal(detalleTransferencia.getImporte()));		
		
		
		String aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getNombre() != null && 
				!detalleTransferencia.getNombre().isEmpty()) {
			aux = detalleTransferencia.getNombre();
		}
		peticion.setDesNombrbenE(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		aux += detalleTransferencia.getDomicilio();
		aux += detalleTransferencia.getPoblacion();
		aux += detalleTransferencia.getcPostal();
		if(aux.length()>140) {
			aux = aux.substring(0, 140);
		}
		peticion.setDesDirecbenE(aux);
		
		aux = ConstantesFO.NOT_PROVIDED;
		if (detalleTransferencia.getObservaciones() != null && 
				!detalleTransferencia.getObservaciones().isEmpty()) {
			aux = detalleTransferencia.getObservaciones();
			if(aux.length()>140) {
				aux = aux.substring(0, 140);
			}
		}
		peticion.setDesObservacE(aux);

		aux = ConstantesFO.NOT_PROVIDED;
		if(detalleTransferencia.getRefOrdenante() != null &&
				!detalleTransferencia.getRefOrdenante().isEmpty()) {
			aux = detalleTransferencia.getRefOrdenante();
		}
		peticion.setDesRefordbeE(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getCodPais() != null && 
				!detalleTransferencia.getCodPais().isEmpty()) {
			aux = detalleTransferencia.getCodPais();
		}
		peticion.setDesPaisPer4E(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getCodPropositoPago() != null && 
				!detalleTransferencia.getCodPropositoPago().isEmpty()) {
			aux = detalleTransferencia.getCodPropositoPago();
		}
		peticion.setDesProposTrE(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getCodTipoTransferencia() != null && 
				!detalleTransferencia.getCodTipoTransferencia().isEmpty()) {
			aux = detalleTransferencia.getCodTipoTransferencia();
		}
		peticion.setDesCatPropoE(aux);
		
		return peticion;
	}
	
	public static PeticionTransaccionPggptw42_1_1_3 trfNacional(
			final DetalleTraspaso detalleTraspaso, FicheroRequest ficheroRequest) {
		
		PeticionTransaccionPggptw42_1_1_3 peticion = new PeticionTransaccionPggptw42_1_1_3();
		peticion.setCodRefcorreE(ficheroRequest.getNumItem());
		
		//obligatorio pero es constante
		peticion.setXtiCorrectoE(ConstantesFO.XTI_CORRECTORA_N);
		peticion.setXtiOperacE(ConstantesFO.XTI_OPERACION_TN);
		peticion.setXtiTipejecuE(ConstantesFO.XTI_EJECUCION);
		peticion.setCodTipgastoE(ConstantesFO.GASTO_SHARE);
		peticion.setCodDivisaE(ConstantesFO.DIVISA_EUR);
		peticion.setDesRefordbeE(ConstantesFO.NOT_PROVIDED);
		peticion.setDesNombrbenE(ConstantesFO.NOT_PROVIDED);
		peticion.setXtiCtaOrdE(ConstantesFO.COD_NUM_UNO);
		peticion.setXtiCtaBenE(ConstantesFO.COD_NUM_UNO);
		peticion.setDesPaisPer4E(ConstantesFO.VACIO_ESPACIO);		
		peticion.setDesProposTrE(ConstantesFO.VACIO_ESPACIO);		
		peticion.setDesCatPropoE(ConstantesFO.VACIO_ESPACIO);			
		peticion.setDesDirecbenE(ConstantesFO.VACIO_ESPACIO);
				
		
		//obtenemos por llamada a kygu
		peticion.setCodBancontE(new Integer(182));		
		peticion.setCodOficontE(new Integer(4000));
		peticion.setCodContrconE(new Integer(525));
		peticion.setCodFolioconE(new Long(3678307));
		//fin de llamada				
		
		peticion.setCodIbanOrdE(detalleTraspaso.getCuentaOrdenante());		
		peticion.setCodIbanBenE(detalleTraspaso.getCuentaBeneficiaria());		
		
		peticion.setImpImporteE(new BigDecimal(detalleTraspaso.getImporte()));
		
		String aux = ConstantesFO.NOT_PROVIDED;
		if (detalleTraspaso.getObservaciones() != null && 
				!detalleTraspaso.getObservaciones().isEmpty()) {
			aux = detalleTraspaso.getObservaciones();
			if(aux.length()>140) {
				aux = aux.substring(0, 140);
			}
		}
		peticion.setDesObservacE(aux);
		
		return peticion;
	}

	public static PeticionTransaccionPggptk70_1_1_1 trfInternacional(
			final DetalleTransferencia detalleTransferencia, FicheroRequest ficheroRequest) {
		PeticionTransaccionPggptk70_1_1_1 peticion = new PeticionTransaccionPggptk70_1_1_1();		
		
		//obligatorio pero es constante
		peticion.setXtiTipejecu(ConstantesFO.XTI_EJECUCION);
		peticion.setXtiCorrecto(ConstantesFO.XTI_CORRECTORA_N);		
		peticion.setCodTipgasto(ConstantesFO.GASTO_SHARE);
		peticion.setCodDivcargo(ConstantesFO.DIVISA_EUR);
		peticion.setCodPagdeord(ConstantesFO.DIVISA_EUR);
		peticion.setCodTipgasto(ConstantesFO.XTI_GASTO_A);
		peticion.setDesNomord(ConstantesFO.NOT_PROVIDED);
		
		peticion.setCodRefcorre(ficheroRequest.getNumItem());
		
		//obtenemos por llamada a kygu
		peticion.setCodBantel(new Integer(182));		
		peticion.setCodOfitel(new Integer(4000));
		peticion.setCodContel(new Integer(525));
		peticion.setCodFoltel(new Long(3678307));
		//fin de llamada
		
		String cuentaDestino = !detalleTransferencia.getEsDestinoLibrePr().equals("N")?
				detalleTransferencia.getCuentaDestinoLibre():detalleTransferencia.getCuentaBeneficiaria();
				
		peticion.setCodCtacargo(detalleTransferencia.getCuentaOrdenante());				
		peticion.setCodCtaben(cuentaDestino);
		peticion.setImpPagdeord(new BigDecimal(detalleTransferencia.getImporte()));
		
		String aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getNombre() != null &&
				!detalleTransferencia.getNombre().isEmpty()) {
			aux = detalleTransferencia.getNombre();
		}
		peticion.setDesNombenef(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getCodPais() != null &&
				!detalleTransferencia.getCodPais().isEmpty()) {
			aux = detalleTransferencia.getCodPais();
		}
		peticion.setCodPaisben(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		if(!detalleTransferencia.getObservaciones().isEmpty()) {
			aux = detalleTransferencia.getObservaciones();
			if(aux.length()>140) {
				aux = aux.substring(0, 140);
			}
		}
		peticion.setDesDetalle(aux);
		
		
		aux = ConstantesFO.VACIO_ESPACIO;
		aux += detalleTransferencia.getDomicilio();
		aux += detalleTransferencia.getPoblacion();
		aux += detalleTransferencia.getcPostal();
		if(aux.length()>140) {
			aux = aux.substring(0, 140);
		}
		peticion.setDesDirecben(aux);
		
		aux = ConstantesFO.NOT_PROVIDED;
		if(detalleTransferencia.getRefOrdenante() != null &&
				!detalleTransferencia.getRefOrdenante().isEmpty()) {
			aux = detalleTransferencia.getRefOrdenante();
		}
		peticion.setDesRefordbeE(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getCodPropositoPago() != null && 
				!detalleTransferencia.getCodPropositoPago().isEmpty()) {
			aux = detalleTransferencia.getCodPropositoPago();
		}
		peticion.setDesProposTrE(aux);
		
		aux = ConstantesFO.VACIO_ESPACIO;
		if(detalleTransferencia.getCodTipoTransferencia() != null && 
				!detalleTransferencia.getCodTipoTransferencia().isEmpty()) {
			aux = detalleTransferencia.getCodTipoTransferencia();
		}
		peticion.setDesCatPropoE(aux);
		
		return peticion;
	}

	public static PeticionTransaccionTpbft080_1_8_1 consultarDetalleCuenta(
			ConsultarDetalleCuentaInDto cdcDtoIn) {

		PeticionTransaccionTpbft080_1_8_1 peticion = new PeticionTransaccionTpbft080_1_8_1();
		
		peticion.setEntCbanco(new Integer(cdcDtoIn.getBanco()));
		peticion.setEntCofici(new Integer(cdcDtoIn.getOficina()));
		peticion.setEntCcontr(new Integer(cdcDtoIn.getContrapartida()));		
		peticion.setEntCfolio(new Long(cdcDtoIn.getFolio()));
		peticion.setSelIntCon(new Integer(cdcDtoIn.getTitularCta()));
		peticion.setSelDomPos(new Integer(cdcDtoIn.getDomicilioPostal()));
		peticion.setSelCtaRel(new Integer(cdcDtoIn.getCtasRelacionadas()));
		
		return peticion;
	}

}
